Ephedra californica recovery

Purpose

To explore Ephedra californica recovery following clipping. Year two in a long-term shrub removal experiment. Aboveground clipping. Panoche Hills Ecological Reserve.

Removal done by A. Liczner, A. Filazzola, T. Noble, and M. Westphal. Loss of shrub effects on animals experiment separate from this survey initiated by A. Liczner and completed 2016. Eva Gruber surveyed for resprouting.

ecoblender

Ephedra foundation effects

An examination of the evidence associated with pattern analyses between ephedra and other plant species at Panoche Hills Ecological Reserve.

#Data
#Primary
foundation <- read_csv("data/ephedra.foundation.csv")
foundation <- foundation %>% mutate(volume = ((length + width)/2)^3*3.14*(1/3))
foundation$year <- as.character(foundation$year)
foundation$site <- as.character(foundation$site)
foundation
## # A tibble: 450 × 11
##     year  region  site   rep microsite length width height abundance
##    <chr>   <chr> <chr> <int>     <chr>  <dbl> <dbl>  <dbl>     <int>
## 1   2016 Panoche   1.3     1     Shrub   3.77  2.38   1.59       263
## 2   2016 Panoche   1.3     1      Open     NA    NA     NA       106
## 3   2016 Panoche   1.3     2     Shrub   3.22  2.38   1.84       276
## 4   2016 Panoche   1.3     2      Open     NA    NA     NA       245
## 5   2016 Panoche   1.3     3     Shrub   1.95  1.30   0.59       217
## 6   2016 Panoche   1.3     3      Open     NA    NA     NA       175
## 7   2016 Panoche   1.3     4     Shrub   4.21  4.39   1.71       283
## 8   2016 Panoche   1.3     4      Open     NA    NA     NA       214
## 9   2016 Panoche   1.3     5     Shrub   3.41  3.17   1.55       241
## 10  2016 Panoche   1.3     5      Open     NA    NA     NA       233
## # ... with 440 more rows, and 2 more variables: richness <int>,
## #   volume <dbl>
#Effect sizes
foundation.rii <- read_csv("data/ephedra.foundation.rii.csv")
foundation.rii <- foundation.rii %>% mutate(volume = ((length + width)/2)^3*3.14*(1/3))
foundation.rii$year <- as.character(foundation.rii$year)
foundation.rii$site <- as.character(foundation.rii$site)
foundation.rii <- foundation.rii %>% filter(abundance < 0.8 & abundance > -0.7)
foundation.rii
## # A tibble: 223 × 10
##     year  region  site   rep microsite length width  abundance   richness
##    <chr>   <chr> <chr> <int>     <chr>  <dbl> <dbl>      <dbl>      <dbl>
## 1   2013 Panoche   1.1     1     Shrub    4.5   4.8 0.22580645  0.0000000
## 2   2013 Panoche   1.1     2     Shrub    2.9   2.1 0.09803922  0.1111111
## 3   2013 Panoche   1.1     3     Shrub    1.2   1.2 0.04761905  0.0000000
## 4   2013 Panoche   1.1     4     Shrub    1.9   2.1 0.21739130  0.0000000
## 5   2013 Panoche   1.1     5     Shrub    3.4   4.4 0.16666667 -0.1428571
## 6   2013 Panoche   1.1     6     Shrub    4.1   2.1 0.39622641 -0.1428571
## 7   2013 Panoche   1.1     7     Shrub    2.4   2.3 0.21212121  0.1428571
## 8   2013 Panoche   1.1     8     Shrub    3.2   3.0 0.16666667  0.0000000
## 9   2013 Panoche   1.1     9     Shrub    4.1   3.8 0.35849057 -0.1428571
## 10  2013 Panoche   1.1    10     Shrub    3.2   3.1 0.31343284 -0.1428571
## # ... with 213 more rows, and 1 more variables: volume <dbl>
rii.2013 <- foundation.rii %>% filter(year == "2013")
rii.2014 <- foundation.rii %>% filter(year == "2014")
rii.2015 <- foundation.rii %>% filter(year == "2015")
rii.2016 <- foundation.rii %>% filter(year == "2016")

#Rii
#differences from open
ggplot(foundation.rii, aes(year, abundance)) + geom_boxplot(fill = "darkseagreen3") + ylab("Rii abundance")

ggplot(foundation.rii, aes(year,richness)) + geom_boxplot(fill = "darkseagreen3") + ylab("Rii richness")

#models for different between years
require(lmerTest)
m <- lmer(abundance~(1|year) + volume, data = foundation.rii)
summary(m) 
## Linear mixed model fit by REML t-tests use Satterthwaite approximations
##   to degrees of freedom [lmerMod]
## Formula: abundance ~ (1 | year) + volume
##    Data: foundation.rii
## 
## REML criterion at convergence: 70.2
## 
## Scaled residuals: 
##      Min       1Q   Median       3Q      Max 
## -2.88876 -0.58976  0.00998  0.71781  2.19688 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  year     (Intercept) 0.003714 0.06094 
##  Residual             0.072891 0.26998 
## Number of obs: 223, groups:  year, 4
## 
## Fixed effects:
##               Estimate Std. Error         df t value Pr(>|t|)   
## (Intercept)   0.200176   0.039885   4.360000   5.019   0.0059 **
## volume       -0.001036   0.000522 220.410000  -1.984   0.0485 * 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##        (Intr)
## volume -0.443
#anova(m, test = "Chisq")

m <- lmer(richness~(1|year) + volume, data = foundation.rii)
summary(m) 
## Linear mixed model fit by REML t-tests use Satterthwaite approximations
##   to degrees of freedom [lmerMod]
## Formula: richness ~ (1 | year) + volume
##    Data: foundation.rii
## 
## REML criterion at convergence: 33.9
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -1.9255 -0.8477  0.0826  0.6685  2.7652 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  year     (Intercept) 0.02499  0.1581  
##  Residual             0.06033  0.2456  
## Number of obs: 223, groups:  year, 4
## 
## Fixed effects:
##               Estimate Std. Error         df t value Pr(>|t|)  
## (Intercept) -1.110e-01  8.247e-02  3.270e+00  -1.346   0.2640  
## volume       8.235e-04  4.765e-04  2.186e+02   1.728   0.0853 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##        (Intr)
## volume -0.195
#anova(m, test = "Chisq")

#different from zero
#ab
t1 <- t.test(foundation.rii$abundance, mu = 0)
t1
## 
##  One Sample t-test
## 
## data:  foundation.rii$abundance
## t = 8.5519, df = 222, p-value = 1.988e-15
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  0.1215495 0.1943441
## sample estimates:
## mean of x 
## 0.1579468
#richness
t2 <- t.test(foundation.rii$richness, mu = 0)
t2
## 
##  One Sample t-test
## 
## data:  foundation.rii$richness
## t = -6.1717, df = 222, p-value = 3.171e-09
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -0.15553974 -0.08024948
## sample estimates:
##  mean of x 
## -0.1178946
# ab each year
t1 <- t.test(rii.2013$abundance, mu = 0)
t1
## 
##  One Sample t-test
## 
## data:  rii.2013$abundance
## t = 8.6815, df = 43, p-value = 5.253e-11
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  0.1640679 0.2633583
## sample estimates:
## mean of x 
## 0.2137131
t1 <- t.test(rii.2014$abundance, mu = 0)
t1
## 
##  One Sample t-test
## 
## data:  rii.2014$abundance
## t = 4.4799, df = 44, p-value = 5.256e-05
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  0.1292521 0.3406396
## sample estimates:
## mean of x 
## 0.2349459
t1 <- t.test(rii.2015$abundance, mu = 0)
t1
## 
##  One Sample t-test
## 
## data:  rii.2015$abundance
## t = 2.9259, df = 44, p-value = 0.005416
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  0.03062158 0.16618316
## sample estimates:
##  mean of x 
## 0.09840237
t1 <- t.test(rii.2016$abundance, mu = 0)
t1
## 
##  One Sample t-test
## 
## data:  rii.2016$abundance
## t = 3.9614, df = 88, p-value = 0.000151
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  0.06057307 0.18252997
## sample estimates:
## mean of x 
## 0.1215515
#richness by year
t2 <- t.test(rii.2013$richness, mu = 0)
t2
## 
##  One Sample t-test
## 
## data:  rii.2013$richness
## t = 0.075117, df = 43, p-value = 0.9405
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -0.03475463  0.03744386
## sample estimates:
##   mean of x 
## 0.001344615
t2 <- t.test(rii.2014$richness, mu = 0)
t2
## 
##  One Sample t-test
## 
## data:  rii.2014$richness
## t = 2.668, df = 44, p-value = 0.01064
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  0.02465005 0.17688174
## sample estimates:
## mean of x 
## 0.1007659
t2 <- t.test(rii.2015$richness, mu = 0)
t2
## 
##  One Sample t-test
## 
## data:  rii.2015$richness
## t = -4.6118, df = 44, p-value = 3.435e-05
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -0.24208568 -0.09484554
## sample estimates:
##  mean of x 
## -0.1684656
t2 <- t.test(rii.2016$richness, mu = 0)
t2
## 
##  One Sample t-test
## 
## data:  rii.2016$richness
## t = -8.6023, df = 88, p-value = 2.702e-13
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -0.3223218 -0.2013451
## sample estimates:
##  mean of x 
## -0.2618334
#volume

ggplot(foundation.rii, aes(volume, abundance)) + geom_point(aes(color = year)) + geom_smooth(method = "lm")

ggplot(foundation.rii, aes(volume, abundance, color = year)) + geom_point() + geom_smooth(method = "lm", se = FALSE)

ggplot(foundation.rii, aes(volume, richness)) + geom_point(aes(color=year)) + geom_smooth(method = "lm")

ggplot(foundation.rii, aes(volume, richness, color = year)) + geom_point() + geom_smooth(method = "lm", se = FALSE)

#posthoc tests from main models
m <- lm(abundance~volume, data = foundation.rii)
m
## 
## Call:
## lm(formula = abundance ~ volume, data = foundation.rii)
## 
## Coefficients:
## (Intercept)       volume  
##   0.1889542   -0.0009065
summary(m)
## 
## Call:
## lm(formula = abundance ~ volume, data = foundation.rii)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.80630 -0.16057  0.01776  0.18475  0.64730 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.1889542  0.0257240   7.345 3.91e-12 ***
## volume      -0.0009065  0.0005259  -1.724   0.0862 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2746 on 221 degrees of freedom
## Multiple R-squared:  0.01327,    Adjusted R-squared:  0.0088 
## F-statistic: 2.971 on 1 and 221 DF,  p-value: 0.08617
m <- lm(richness~volume, data = foundation.rii)
m
## 
## Call:
## lm(formula = richness ~ volume, data = foundation.rii)
## 
## Coefficients:
## (Intercept)       volume  
##  -0.1515101    0.0009828
summary(m)
## 
## Call:
## lm(formula = richness ~ volume, data = foundation.rii)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.54197 -0.20375  0.00403  0.18907  0.79721 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.1515101  0.0265882  -5.698 3.84e-08 ***
## volume       0.0009828  0.0005436   1.808    0.072 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2838 on 221 degrees of freedom
## Multiple R-squared:  0.01457,    Adjusted R-squared:  0.01011 
## F-statistic: 3.268 on 1 and 221 DF,  p-value: 0.07198
#test 2016 only
m <- lm(abundance~volume, data = rii.2016)
m
## 
## Call:
## lm(formula = abundance ~ volume, data = rii.2016)
## 
## Coefficients:
## (Intercept)       volume  
##    0.217302    -0.002641
summary(m)
## 
## Call:
## lm(formula = abundance ~ volume, data = rii.2016)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.78160 -0.12944  0.00135  0.23578  0.46049 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.217302   0.040966   5.304 8.49e-07 ***
## volume      -0.002641   0.000796  -3.318  0.00133 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2743 on 87 degrees of freedom
## Multiple R-squared:  0.1123, Adjusted R-squared:  0.1021 
## F-statistic: 11.01 on 1 and 87 DF,  p-value: 0.001325
m <- lm(richness~volume, data = rii.2016)
m
## 
## Call:
## lm(formula = richness ~ volume, data = rii.2016)
## 
## Coefficients:
## (Intercept)       volume  
##   -0.344154     0.002271
summary(m)
## 
## Call:
## lm(formula = richness ~ volume, data = rii.2016)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.40545 -0.26604  0.03897  0.21848  0.59324 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.344154   0.041271  -8.339 1.01e-12 ***
## volume       0.002271   0.000802   2.831  0.00576 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2763 on 87 degrees of freedom
## Multiple R-squared:  0.08437,    Adjusted R-squared:  0.07385 
## F-statistic: 8.017 on 1 and 87 DF,  p-value: 0.005756
#Primary data
#ggplot(foundation, aes(microsite, abundance)) + geom_boxplot() + facet_grid(~year)
#ggplot(foundation, aes(microsite, richness)) + geom_boxplot() + facet_grid(~year)
#ggplot(foundation, aes(volume, abundance, color = year)) + geom_point() + geom_smooth(method = "lm")
#ggplot(foundation, aes(volume, richness, color = year)) + geom_point() + geom_smooth(method = "lm")

Recovery and stem data

#recovery
data <- read_csv("data/EH.recovery.2016.csv")
data <- data %>% mutate(volume = ((length + width)/2)^3*3.14*(1/3)) %>% arrange(desc(resprout))
data
## # A tibble: 40 × 9
##        date census    ID length width height resprout
##       <chr>  <chr> <int>  <dbl> <dbl>  <dbl>    <int>
## 1  nov.2016 post.2   182     NA    NA     NA       15
## 2  nov.2016 post.2   217   1.15  1.25   0.85       15
## 3  nov.2016 post.2   303   3.50  2.80   0.60       13
## 4  nov.2016 post.2   614   1.70  1.15   0.43       12
## 5  nov.2016 post.2   146   3.40  2.15   0.70       10
## 6  nov.2016 post.2   621   1.85  0.90   0.65       10
## 7  nov.2016 post.2   651   2.55  2.40   1.00       10
## 8  nov.2016 post.2   137   1.90  3.30   0.60        9
## 9  nov.2016 post.2   245   3.20  2.50   0.80        8
## 10 nov.2016 post.2   271   2.80  2.55   0.71        8
## # ... with 30 more rows, and 2 more variables: observations <chr>,
## #   volume <dbl>
#stem data
wet.weights <-read.csv("data/wet.weights.csv")
total.weight <- wet.weights %>% select(ID, total.weight)

stems <- read_csv("data/stem.analyses.csv")

EDA field data & wet weight

#current volume used####
#data viz
nov.2016 <- data %>% filter(date == "nov.2016") #only resurvey
nov.2016 <- left_join(nov.2016, total.weight, by = "ID")

p1 <- ggplot(nov.2016, aes(resprout, weight= volume)) + 
  geom_histogram(binwidth = 2, fill = "dodgerblue") +
  xlab("number of shoots resprouted") +
  ylab("relative weighted frequency by current volume")
ggplotly(p1)
p1.1 <- ggplot(nov.2016, aes(ID, resprout)) + 
  geom_point(aes(size = volume), color = "dodgerblue") 
ggplotly(p1.1)
nov.2016 <- nov.2016 %>% filter(resprout < 15) #filter out my post hoc classifications

p2 <- ggplot(nov.2016, aes(volume, resprout)) + 
  geom_point(color = "dodgerblue") + 
  xlab("current shrub volume") +
  ylab("number of resprouted shoots") +
  geom_smooth(method = lm)
ggplotly(p2)
p3 <- ggplot(nov.2016, aes(volume, total.weight)) + 
  geom_point(color = "dodgerblue") + 
  xlab("current shrub volume") +
  ylab("total wet weight") +
  geom_smooth(method = lm)
ggplotly(p3)
#number of resprouted shoots predict wet weight
p4 <- ggplot(nov.2016, aes(resprout, total.weight)) + 
  geom_point(color = "dodgerblue") + 
  xlab("resprouted shoot numbers") +
  ylab("total wet weight") +
  geom_smooth(method = lm)
ggplotly(p4)
#quick test
fit <- lm(total.weight ~ resprout, data= nov.2016)
summary(fit)
## 
## Call:
## lm(formula = total.weight ~ resprout, data = nov.2016)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2127.08  -615.68   -99.73  1120.22  2763.02 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)   594.48     738.92   0.805   0.4337  
## resprout      189.05      95.54   1.979   0.0665 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1390 on 15 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.207,  Adjusted R-squared:  0.1541 
## F-statistic: 3.916 on 1 and 15 DF,  p-value: 0.06649
#simple main model
m1 <- glm(resprout ~ volume, data = nov.2016)
summary(m1)
## 
## Call:
## glm(formula = resprout ~ volume, data = nov.2016)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -3.9476  -1.9340  -0.7416   0.9654   7.2943  
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  3.94757    0.97041   4.068 0.000895 ***
## volume       0.25031    0.06696   3.738 0.001793 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 8.557791)
## 
##     Null deviance: 256.50  on 17  degrees of freedom
## Residual deviance: 136.92  on 16  degrees of freedom
## AIC: 93.605
## 
## Number of Fisher Scoring iterations: 2
anova(m1, test = "Chisq")
## Analysis of Deviance Table
## 
## Model: gaussian, link: identity
## 
## Response: resprout
## 
## Terms added sequentially (first to last)
## 
## 
##        Df Deviance Resid. Df Resid. Dev  Pr(>Chi)    
## NULL                      17     256.50              
## volume  1   119.58        16     136.93 0.0001855 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
m1.1 <- glm(total.weight ~ volume, data = nov.2016)
summary(m1.1)
## 
## Call:
## glm(formula = total.weight ~ volume, data = nov.2016)
## 
## Deviance Residuals: 
##      Min        1Q    Median        3Q       Max  
## -2045.56   -437.74    -66.36    467.51   2879.01  
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)   
## (Intercept)   887.75     414.97   2.139  0.04926 * 
## volume         93.35      27.83   3.354  0.00435 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 1392680)
## 
##     Null deviance: 36559960  on 16  degrees of freedom
## Residual deviance: 20890205  on 15  degrees of freedom
##   (1 observation deleted due to missingness)
## AIC: 292.61
## 
## Number of Fisher Scoring iterations: 2
anova(m1.1, test = "Chisq")
## Analysis of Deviance Table
## 
## Model: gaussian, link: identity
## 
## Response: total.weight
## 
## Terms added sequentially (first to last)
## 
## 
##        Df Deviance Resid. Df Resid. Dev  Pr(>Chi)    
## NULL                      16   36559960              
## volume  1 15669755        15   20890205 0.0007956 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#setup volume####
setup <- data %>% filter(date == "april.2013") %>% 
  select(ID, volume) %>% rename(setup.vol = volume)

merged.data <- left_join(nov.2016, setup)

#repeat all above worflow code
p3 <- ggplot(merged.data, aes(resprout, weight= setup.vol)) + 
  geom_histogram(binwidth = 2, fill = "dodgerblue") +
  xlab("number of shoots resprouted") +
  ylab("relative weighted frequency by setup volume")
ggplotly(p3)
p3.1 <- ggplot(merged.data, aes(total.weight, weight= setup.vol)) + 
  geom_histogram(binwidth = 1000, fill = "dodgerblue") +
  xlab("total wet weight regrowth") +
  ylab("relative weighted frequency by setup volume")
ggplotly(p3.1)
p3.2 <- ggplot(merged.data, aes(ID, resprout)) + 
  geom_point(aes(size = setup.vol), color = "dodgerblue") 
ggplotly(p3.2)
merged.data <- merged.data %>% filter(resprout < 15) #filter out my post hoc classifications

p4 <- ggplot(merged.data, aes(setup.vol, resprout)) + 
  geom_point(color = "dodgerblue") + 
  xlab("setup shrub volume") +
  ylab("number of resprouted shoots") +
  geom_smooth(method = lm)
ggplotly(p4)
p4.1 <- ggplot(merged.data, aes(setup.vol, total.weight)) + 
  geom_point(color = "dodgerblue") + 
  xlab("setup shrub volume") +
  ylab("total wet weight regrowth") +
  geom_smooth(method = lm)
ggplotly(p4.1)
#simple model
m2 <- glm(resprout ~ setup.vol, data = merged.data)
summary(m2)
## 
## Call:
## glm(formula = resprout ~ setup.vol, data = merged.data)
## 
## Deviance Residuals: 
##    Min      1Q  Median      3Q     Max  
## -4.989  -2.966  -1.361   2.726   6.840  
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)   
## (Intercept)  4.78551    1.40967   3.395   0.0037 **
## setup.vol    0.05216    0.03352   1.556   0.1392   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 13.92356)
## 
##     Null deviance: 256.50  on 17  degrees of freedom
## Residual deviance: 222.78  on 16  degrees of freedom
## AIC: 102.37
## 
## Number of Fisher Scoring iterations: 2
anova(m2, test = "Chisq")
## Analysis of Deviance Table
## 
## Model: gaussian, link: identity
## 
## Response: resprout
## 
## Terms added sequentially (first to last)
## 
## 
##           Df Deviance Resid. Df Resid. Dev Pr(>Chi)
## NULL                         17     256.50         
## setup.vol  1   33.723        16     222.78   0.1196
m2.1 <- glm(total.weight ~ setup.vol, data = merged.data)
summary(m2)
## 
## Call:
## glm(formula = resprout ~ setup.vol, data = merged.data)
## 
## Deviance Residuals: 
##    Min      1Q  Median      3Q     Max  
## -4.989  -2.966  -1.361   2.726   6.840  
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)   
## (Intercept)  4.78551    1.40967   3.395   0.0037 **
## setup.vol    0.05216    0.03352   1.556   0.1392   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 13.92356)
## 
##     Null deviance: 256.50  on 17  degrees of freedom
## Residual deviance: 222.78  on 16  degrees of freedom
## AIC: 102.37
## 
## Number of Fisher Scoring iterations: 2
anova(m2.1, test = "Chisq")
## Analysis of Deviance Table
## 
## Model: gaussian, link: identity
## 
## Response: total.weight
## 
## Terms added sequentially (first to last)
## 
## 
##           Df Deviance Resid. Df Resid. Dev Pr(>Chi)
## NULL                         16   36559960         
## setup.vol  1   698277        15   35861683   0.5889
#Proportion regrowth by initial shrub size
merged.data <-merged.data %>% mutate(relative.regrowth = resprout/setup.vol) #calculate proportion reprouting by initial size

merged.data <-merged.data %>% mutate(relative.biomass.regrowth = total.weight/setup.vol) #calculate proportion reprouting by initial size

p5 <- ggplot(merged.data, aes(volume, relative.regrowth)) + geom_point(color = "dodgerblue") + xlab("current shrub volume") + 
  geom_smooth(method = lm) +
  ylab("regrowth weighted by initial shrub size") +
  scale_y_continuous(breaks=c(-2,-1,0,1,2))
ggplotly(p5)
p5.1 <- ggplot(merged.data, aes(volume, relative.biomass.regrowth)) + geom_point(color = "dodgerblue") + xlab("current shrub volume") + 
  geom_smooth(method = lm) +
  ylab("biomass regrowth weighted by initial shrub size") +
  scale_y_continuous(breaks=c(-2,-1,0,1,2))
ggplotly(p5.1)
m3 <- lm(merged.data$relative.regrowth ~ merged.data$volume)
summary(m3) # slope is not significantly different from 0 so no difference in proportionate regrowth
## 
## Call:
## lm(formula = merged.data$relative.regrowth ~ merged.data$volume)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.39398 -0.29158 -0.16772 -0.06767  1.91933 
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)  
## (Intercept)        0.393979   0.206191   1.911   0.0741 .
## merged.data$volume 0.001213   0.014228   0.085   0.9331  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6216 on 16 degrees of freedom
## Multiple R-squared:  0.0004539,  Adjusted R-squared:  -0.06202 
## F-statistic: 0.007266 on 1 and 16 DF,  p-value: 0.9331
anova(m3, test = "Chisq")
## Analysis of Variance Table
## 
## Response: merged.data$relative.regrowth
##                    Df Sum Sq Mean Sq F value Pr(>F)
## merged.data$volume  1 0.0028 0.00281  0.0073 0.9331
## Residuals          16 6.1818 0.38636
m3.1 <- lm(merged.data$relative.biomass.regrowth ~ merged.data$volume)
summary(m3.1) # slope is not significantly different from 0 so no difference in proportionate regrowth
## 
## Call:
## lm(formula = merged.data$relative.biomass.regrowth ~ merged.data$volume)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -153.97 -109.28  -97.07  -26.06 1070.12 
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)
## (Intercept)         122.584    103.349   1.186    0.254
## merged.data$volume    1.980      6.931   0.286    0.779
## 
## Residual standard error: 293.9 on 15 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.00541,    Adjusted R-squared:  -0.0609 
## F-statistic: 0.0816 on 1 and 15 DF,  p-value: 0.779
anova(m3.1, test = "Chisq")
## Analysis of Variance Table
## 
## Response: merged.data$relative.biomass.regrowth
##                    Df  Sum Sq Mean Sq F value Pr(>F)
## merged.data$volume  1    7049    7049  0.0816  0.779
## Residuals          15 1295773   86385

EDA stems & dry weight

merged.data <- left_join(merged.data, stems, by = "ID")
#Mass EDA####
#Did wet predict dry weights?
p <- ggplot(merged.data, aes(total.weight, total.dry.weight.g)) + 
  geom_point(color = "dodgerblue") + 
  xlab("total wet weight") +
  ylab("total dry weight") +
  geom_smooth(method = lm)
ggplotly(p)
fit <- lm(total.dry.weight.g ~ total.weight, data= merged.data)
summary(fit)
## 
## Call:
## lm(formula = total.dry.weight.g ~ total.weight, data = merged.data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -670.37  -23.23   37.01   37.01 2341.93 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -171.98974   49.50471  -3.474 0.000573 ***
## total.weight    0.95274    0.01173  81.232  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 438.2 on 370 degrees of freedom
##   (172 observations deleted due to missingness)
## Multiple R-squared:  0.9469, Adjusted R-squared:  0.9468 
## F-statistic:  6599 on 1 and 370 DF,  p-value: < 2.2e-16
#Volume by dry weight
p <- ggplot(merged.data, aes(volume, total.dry.weight.g)) + 
  geom_point(color = "dodgerblue") + 
  xlab("current shrub volume") +
  ylab("total dry weight") +
  geom_smooth(method = lm)
ggplotly(p)
fit <- lm(total.dry.weight.g ~ volume, data= merged.data)
summary(fit)
## 
## Call:
## lm(formula = total.dry.weight.g ~ volume, data = merged.data)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
##  -4458  -1068   1070   1070   1070 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  1080.63     187.51   5.763 1.74e-08 ***
## volume        171.02      12.49  13.694  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1549 on 370 degrees of freedom
##   (172 observations deleted due to missingness)
## Multiple R-squared:  0.3363, Adjusted R-squared:  0.3346 
## F-statistic: 187.5 on 1 and 370 DF,  p-value: < 2.2e-16
#number of resprouted shoots predict dry weight
p4 <- ggplot(merged.data, aes(resprout, total.dry.weight.g)) + 
  geom_point(color = "dodgerblue") + 
  xlab("resprouted shoot numbers") +
  ylab("total dry weight") +
  geom_smooth(method = lm)
ggplotly(p4)
fit <- lm(total.dry.weight.g ~ resprout, data= merged.data)
summary(fit)
## 
## Call:
## lm(formula = total.dry.weight.g ~ resprout, data = merged.data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4455.8  -465.4   836.8   836.8   836.8 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -639.78     262.31  -2.439   0.0152 *  
## resprout      466.79      29.02  16.087   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1459 on 370 degrees of freedom
##   (172 observations deleted due to missingness)
## Multiple R-squared:  0.4116, Adjusted R-squared:   0.41 
## F-statistic: 258.8 on 1 and 370 DF,  p-value: < 2.2e-16
merged.data <-merged.data %>% mutate(relative.dry.biomass.regrowth = total.weight/setup.vol) #calculate proportion reprouting by initial size
library(outliers)
chisq.out.test(merged.data$relative.dry.biomass.regrowth)
## 
##  chi-squared test for outlier
## 
## data:  merged.data$relative.dry.biomass.regrowth
## X-squared = 1.4361, p-value = 0.2308
## alternative hypothesis: highest value 1224.12420382166 is an outlier
merged.data <- merged.data %>% filter(relative.dry.biomass.regrowth < 1224)

p <- ggplot(merged.data, aes(volume, relative.dry.biomass.regrowth)) + geom_point(color = "dodgerblue") + xlab("current shrub volume") + 
  geom_smooth(method = lm) +
  ylab("dry biomass regrowth by initial shrub size") +
  scale_y_continuous(breaks=c(-2,-1,0,1,2))
ggplotly(p)
m <- lm(merged.data$relative.dry.biomass.regrowth ~ merged.data$volume)
summary(m) # slope is not significantly different from 0 so no difference in proportionate regrowth
## 
## Call:
## lm(formula = merged.data$relative.dry.biomass.regrowth ~ merged.data$volume)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -42.639 -26.493 -26.493  -1.809 164.079 
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         41.0911     3.5949  11.430   <2e-16 ***
## merged.data$volume   0.6456     0.3770   1.712   0.0878 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 53.25 on 319 degrees of freedom
## Multiple R-squared:  0.009109,   Adjusted R-squared:  0.006003 
## F-statistic: 2.933 on 1 and 319 DF,  p-value: 0.08778
anova(m, test = "Chisq")
## Analysis of Variance Table
## 
## Response: merged.data$relative.dry.biomass.regrowth
##                     Df Sum Sq Mean Sq F value  Pr(>F)  
## merged.data$volume   1   8317  8317.1  2.9326 0.08778 .
## Residuals          319 904714  2836.1                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Morphometrics analyses####
p <- ggplot(merged.data, aes(total.singletons, total.complex.green.shoots)) + geom_point(color = "dodgerblue") +
  geom_smooth(method = lm)
  ggplotly(p)
  p <- ggplot(merged.data, aes(resprout, total.singletons)) + 
    geom_point(color = "dodgerblue") +
    geom_smooth(method = lm)
  ggplotly(p)
    p <- ggplot(merged.data, aes(volume, total.singletons)) + 
    geom_point(color = "dodgerblue") +
    geom_smooth(method = lm)
  ggplotly(p)

Summary

Primary trends.

  1. Counting resprouted shoots is an effective and relatively accurate mechanism to estimate regrowth in Ephedra californica following damage. Trends in regrowth similar between shoot number and total wet weight, and shoot number significantly and effectively predicts the mass of biomass regrowth per shrub.

  2. Larger shrubs have more resprouted shoots and regrowth of biomass; however, the regrowth is not proportionately greater for increasingly larger shrubs. THIS is an important finding. Larger shrubs do NOT have a greater capacity to proportionally recover from damage relative to smaller shrubs.

  3. Ephedra californica can recover to some extent following damage. However, we do not know how these recovery patterns compare to the background growth patterns of undamaged shrubs nor whether subsequent or repeated damages to this species reduces its potential capacity to recover.

  4. Methodologically, wet weight is an effective measure of biomass produced (i.e. predicts dry weight effectively with little variation).

Future directions.

  1. Remeasure recovery in 1 and 2 years to this new clipping event.

  2. Develop a means to estimate growth rate in undamaged shrubs for the next 1-2years.